
import com.google.common.collect.Lists;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.junit.Before;
import org.junit.Test;

import java.util.ArrayList;
import java.util.List;

public class CaseThree {
    /**
     * 角色
     */
    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    private class Role {
        // 权限列表
        private List<Permission> permissions;
    }

    /**
     * 权限
     */
    @Data
    @AllArgsConstructor
    private class Permission {
        // 权限名称
        private String name;
    }

    // 用户角色列表
    private List<Role> roleList;

    @Before
    public void init() {
        roleList = new ArrayList<>();

        // 管理员角色
        Role adminRole = new Role();
        List<Permission> adminPermissionList = Lists.newArrayList(
                new Permission("删除"),
                new Permission("查看"),
                new Permission("导出")
        );
        adminRole.setPermissions(adminPermissionList);


        Role userRole = new Role();
        List<Permission> userPermissionList = Lists.newArrayList(
                new Permission("新建"),
                new Permission("修改"),
                new Permission("删除"),
                new Permission("查看")
        );
        userRole.setPermissions(userPermissionList);

        // 这个人拥有2个角色
        roleList.add(adminRole);
        roleList.add(userRole);
        // 问题：找出这个人拥有的所有权限
    }

    @Test
    public void findPermission() {
        roleList.stream()
                // TODO: 扁平化MAP， 获取对象中的集合类属性，组恒一个新的流
                .flatMap(role -> role.getPermissions().stream())
                .distinct()
                .forEach(System.out::println);
    }
}
